// 数据验证工具
// 用于确保申请状态和审核意见的一致性

/**
 * 验证申请状态和审核意见的一致性
 * @param {Object} application 申请数据
 * @returns {Object} 修正后的申请数据
 */
function validateApplicationConsistency(application) {
  if (!application) {
    return application;
  }

  const { status, reviewComment, processComment } = application;
  
  // 创建修正后的数据副本
  const correctedApplication = { ...application };
  
  // 如果状态是已驳回，但审核意见是正面的，需要修正
  if (status === 'rejected') {
    if (reviewComment && isPositiveComment(reviewComment)) {
      console.warn(`申请ID ${application.id} 状态为已驳回但审核意见为正面，数据不一致`);
      correctedApplication.reviewComment = '申请材料不符合要求，请重新提交';
    }
    
    if (processComment && isPositiveComment(processComment)) {
      console.warn(`申请ID ${application.id} 状态为已驳回但处理意见为正面，数据不一致`);
      correctedApplication.processComment = '申请材料不符合要求，请重新提交';
    }
  }
  
  // 如果状态是已通过，但审核意见是负面的，也需要修正
  if (status === 'approved') {
    if (reviewComment && isNegativeComment(reviewComment)) {
      console.warn(`申请ID ${application.id} 状态为已通过但审核意见为负面，数据不一致`);
      correctedApplication.reviewComment = '申请材料齐全，符合申请条件';
    }
    
    if (processComment && isNegativeComment(processComment)) {
      console.warn(`申请ID ${application.id} 状态为已通过但处理意见为负面，数据不一致`);
      correctedApplication.processComment = '申请材料齐全，符合申请条件';
    }
  }
  
  return correctedApplication;
}

/**
 * 判断评论是否为正面评价
 * @param {string} comment 评论内容
 * @returns {boolean} 是否为正面评价
 */
function isPositiveComment(comment) {
  if (!comment) return false;
  
  const positiveKeywords = [
    '通过', '符合要求', '符合条件', '同意', '批准', 
    '材料齐全', '条件满足', '审核通过', '申请通过'
  ];
  
  return positiveKeywords.some(keyword => comment.includes(keyword));
}

/**
 * 判断评论是否为负面评价
 * @param {string} comment 评论内容
 * @returns {boolean} 是否为负面评价
 */
function isNegativeComment(comment) {
  if (!comment) return false;
  
  const negativeKeywords = [
    '不符合', '驳回', '拒绝', '材料不全', '条件不满足',
    '审核不通过', '申请不通过', '缺少材料', '不符合要求'
  ];
  
  return negativeKeywords.some(keyword => comment.includes(keyword));
}

/**
 * 获取状态对应的默认审核意见
 * @param {string} status 申请状态
 * @returns {string} 默认审核意见
 */
function getDefaultCommentByStatus(status) {
  const defaultComments = {
    'pending': '等待审核中...',
    'approved': '申请材料齐全，符合申请条件',
    'rejected': '申请材料不符合要求，请重新提交',
    'completed': '申请已完成'
  };
  
  return defaultComments[status] || '等待处理';
}

/**
 * 验证并修正申请列表数据
 * @param {Array} applications 申请列表
 * @returns {Array} 修正后的申请列表
 */
function validateApplicationsList(applications) {
  if (!Array.isArray(applications)) {
    return applications;
  }
  
  return applications.map(application => validateApplicationConsistency(application));
}

module.exports = {
  validateApplicationConsistency,
  validateApplicationsList,
  isPositiveComment,
  isNegativeComment,
  getDefaultCommentByStatus
};
